Ja, schauen wir uns mal die klassischen Gegenmaßnahmen, die man jetzt ergreifen kann.
Nun, wir müssen zunächst uns mal klar darüber werden, welche Voraussetzungen müssen denn
eigentlich bestehen, dass es überhaupt solchen Verklemmungen bei einem Deadlock kommen kann.
Das Gleiche, was wir jetzt betrachten werden, gilt übrigens auch für die Lebendsperre.
Also unabhängig davon, ob jetzt der Stillstand im passiven Wartezustand von Prozessen verzeichnet wird
oder nur im aktiven Wartezustand.
Die Bedingungen, die wir jetzt betrachten und uns ein bisschen genauer anschauen,
gelten für beide Formen von Verklemmungen.
Nun, da haben wir zunächst die notwendigen Bedingungen, die für die gekoppelten Prozesse gelten müssen.
Unsere Beispiele haben es gezeigt, das ist die Ausschließlichkeit in der Betriebsmittelbenutzung.
Das heißt also der wechselseitige Ausschluss in der Benutzung eines Betriebsmittels.
Dann haben wir eine Situation, wo immer Betriebsmittel nachgefordert werden.
Man besitzt bereits eins und braucht noch ein weiteres.
Und das wird schrittweise geschehen.
Das ist die sogenannte Hold-and-weight-Bedingung.
Man fordert also Betriebsmittel nach.
Und eine andere Situation ist noch, dass wenn man ein Betriebsmittel zugeteilt bekommen hat,
dann wird es einem auch nicht mehr entzogen.
No preemption, also die Unentziehbarkeit der bereits zugeteilten Betriebsmittel.
Das sind die drei sogenannten notwendigen Bedingungen, die für diese gekoppelten Prozesse,
die sich in Verklemmungssituationen befinden, denn gelten müssen.
Es muss noch eine vierte notwendige und hinreichende Bedingung hinzukommen.
Es muss nämlich so sein, dass diese Prozesse aufeinander warten.
Und das ist dann ein zirkulares Warten.
Das muss eingetreten sein.
Das heißt, jeder Prozess hält eben eins oder mehrere Betriebsmittel,
die bereits ein anderer Prozess in derselben Kette angefordert hat, belegt hat,
aufgrund der Ausschließlichkeit eben dann aber nicht bekommt und darauf warten muss.
Die Situation muss eingetroffen sein.
Nun ist an sich die Situation, um ein verklemmungsfreies System zu bekommen, recht einfach.
Wir könnten hingehen und sagen, es reicht aus, eine einzelne dieser Bedingungen halt hier zu entkräften.
Denn es müssen alle vier Bedingungen zu einem Zeitpunkt erfüllt sein,
damit es zu einer Prozessverklemmung oder einer Gruppe von Prozessen, die in den verklemmt sind,
denn letztendlich kommt.
Es reicht aus, eine dieser Bedingungen zu entkräften.
Und da gibt es noch verschiedene Herangehensweisen, die man jetzt nutzen kann.
Das hat auch mit der Problemstellung zu tun, vor der man letztendlich steht,
welche Art der Entkräftung einer Bedingung denn vielleicht am einfachsten für mein gegebenes System ist.
Aber noch mal, es reicht aus, eine dieser vier Bedingungen zu entkräften.
Und dann kann man sagen, zumindest auf dem Blatt Papier von der Theorie her, das System ist verklemmungsfrei.
Nun, da haben wir zunächst mal die sogenannte Verklemmungsvorbeugung, Deadlock Prevention.
Das sind Vorsorgemaßnahmen, damit eben denn solche gekoppelten Prozesse überhaupt gar keine Verklemmung entwickeln können.
Da gibt es die sogenannten indirekten Methoden, die man nutzen kann.
Und das ist nämlich eine Herangehensweise, wo man sagt, eine der drei notwendigen Bedingungen aufheben.
Was kann man machen?
Man kann den wechselseitigen Ausschluss, wenn wir also an kritische Abschnitte im Code zum Beispiel denken,
möglicherweise durch nicht blockierende Synchronisation ersetzen.
Oder man ist in der Lage, seinen kritischen Abschnitt und die Anweisungsfolgen, die dort existieren,
die man zum Beispiel durch Mutex geschützt hat, durch atomare Operationen, durch atomare Maschinenbefehle letztendlich nachbilden zu können.
Dann hat man de facto diesen wechselseitigen Ausschluss, den man ja softwaremäßig praktiziert.
Presenters
Zugänglich über
Offener Zugang
Dauer
00:34:45 Min
Aufnahmedatum
2020-12-14
Hochgeladen am
2020-12-14 14:09:52
Sprache
de-DE